import numpy as np
%matplotlib notebook
import matplotlib.pyplot as plt
import ipywidgets as widgets
from maux import *
hide_interactive_toolbars()
# interaktívny editor pre vyšetrovanie priebehu elementárnych funkcií
from jedit import editor
np.warnings.filterwarnings('ignore', category=np.VisibleDeprecationWarning)
# nastavenie jazyka
from locale import setlocale, LC_ALL
from platform import uname
if uname()[0] == 'Linux':
setlocale(LC_ALL, 'sk_SK.utf8')
else:
setlocale(LC_ALL, 'sk_SK')
plt.rcParams["axes.formatter.use_locale"] = True
Racionálna lomená funkcia je určená rovnicou $$y = \frac{P(x)}{R(x)},$$ kde $P(x)$ a $R(x)$ su reálne polynómy, pričom polynóm v menovateli nie je nulový polynóm. Definičným oborom je množina všetkých reálnych čísel $x$, pre ktoré $R(x) \ne 0$. Polynomiálne a lineárne lomené funkcie sú špeciálnym prípadom racionálne lomených funkcií.
Nakreslenie grafu racionálne lomenej funkcie danej rovnicou $$y = \frac{x^2}{x^2-1}.$$ Definičným oborom je množina všetkých reálnych čísel, ktoré nepatria do množiny $\{-1,1\}$.
#####
##### nakreslenie grafu funkcie
#####
#### vstupné údaje
def f(X): return X ** 2 / (X ** 2 - 1) # ufunc verzia funkcie
X = np.linspace(-6, 6, 12*100+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
X1, X2, X3 = X[X < -1], X[(X > -1) & (X < 1)], X[X > 1] # čísla -1, 1 nepatria do oboru definície
Y1, Y2, Y3 = f(X1), f(X2), f(X3) # odpovedajúce hodnoty závislej premennej
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 9) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
ax.set_title(r"Graf funkcie $y = \dfrac{x^2}{x^2-1}$", fontdict={'verticalalignment': 'bottom'}) # pomenovanie diagramu
ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
# ax.grid() # pravoúhla sieť
ax.set_ylim(-5.5, 6.5) # ohraničenie hodnôt pre osu y
ax.set_xticks(range(-6, 6+1)) # kótovanie x-ovej osi
ax.set_yticks(range(-5, 6+1)) # kótovanie y-ovej osi
## graf funkcie
color = ax.plot([], [])[0].get_color()
ax.plot(X1, Y1, X2, Y2, X3, Y3, c=color)
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
fig.show()
#### editor
# editor(figure=fig, axes=ax, function=f, intervals=[X1, X2, X3])
Vyšetrenie priebehu racionálne lomenej funkcie danej rovnicou $$y = \frac{x^2}{x^2-1}.$$ Tu nás zaujímajú tieto informácie:
Ako vypočítať asymptoty grafu funkcie? Všimnime si najprv, že platí $$ \lim_{x \to 1}\ (x^2-1) = 0 \\ x > 1 \Rightarrow x^2-1 > 0 \\ 0 < x < 1 \Rightarrow x^2-1 < 0 \\ %x \ne 1 \Rightarrow x^2 > 0 0 < |x - 1| < \frac{1}{2} \Rightarrow x^2 \geq \frac{1}{4} > 0 . $$ Odtiaľ dostaneme, že $$ \lim_{x \to 1_-} \frac{x^2}{x^2-1} = -\infty \quad \lim_{x \to 1_+} \frac{x^2}{x^2-1} = +\infty . $$ Podobne zistíme, že $$ \lim_{x \to -1_-} \frac{x^2}{x^2-1} = +\infty \quad \lim_{x \to -1_+} \frac{x^2}{x^2-1} = -\infty . $$ Asymptotami bez smernice grafu funkcie sú tak priamky rovnobežné s osou $y$ prechádzajúce bodmi $-1$ a $1$ na $x$-ovej osi.
Treba ešte nájsť asymptoty so smernicou grafu funkcie v bodoch $\pm\infty$. Platí $$ \lim_{x \to +\infty} \frac{\frac{x^2}{x^2-1}}{x} = \lim_{x \to +\infty} \frac{x}{x^2-1} = \lim_{x \to +\infty} \frac{1}{x} \frac{1}{1-\frac{1}{x^2}} = \lim_{x \to +\infty} \frac{1}{x} \times \lim_{x \to +\infty} \frac{1}{1-\frac{1}{x^2}} = 0 \times 1 = 0 \\ \lim_{x \to +\infty} \left(\frac{x^2}{x^2-1} - 0x\right) = \lim_{x \to +\infty} \frac{x^2}{x^2-1} = \lim_{x \to +\infty} \frac{1}{1-\frac{1}{x^2}} = 1 . $$ Odtiaľ $$ \lim_{x \to +\infty} \left(\frac{x^2}{x^2-1} - (0x+1)\right) = 0 . $$ Asymptotou so smernicou v bode $+\infty$ je tak priamka $y-1 = 0$. Podobne zistíme, že tá istá priamka je asymptotou so smernicou v bode $-\infty$.
#####
##### vyšetrenie priebehu funkcie
#####
#### vstupné údaje
def f(X): return X ** 2 / (X ** 2 - 1) # ufunc verzia funkcie
X = np.linspace(-6, 6, 12*20+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
X1, X2, X3 = X[X < -1], X[(X > -1) & (X < 1)], X[X > 1] # čísla -1, 1 nepatria do oboru definície
Y1, Y2, Y3 = f(X1), f(X2), f(X3) # odpovedajúce hodnoty závislej premennej
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 9) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
ax.set_title(r"Priebeh funkcie $y = \dfrac{x^2}{x^2-1}$", fontdict={'verticalalignment': 'bottom'}) # pomenovanie diagramu
ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
ax.grid() # pravoúhla sieť
ax.set_ylim(-5.5, 6.5) # ohraničenie hodnôt pre osu y
ax.set_xticks(range(-6, 6+1)) # kótovanie x-ovej osi
ax.set_yticks(range(-5, 6+1)) # kótovanie y-ovej osi
## nulové body funkcie
ax.plot(0, 0, 'kx', label=r"nulový bod")
## x-ové súradnice extrémov funkcie vrátane krajných bodov intervalov
ps = [X1[0], X1[-1], X2[0], 0, X2[-1], X3[0], X3[-1]]
## extrémy funkcie
ax.plot(ps[3], f(ps[3]), 'o', label=r"ostré lokálne maximum")
## intervaly, na ktorých je funkcia rastúca
color = ax.plot([], [], label=r"rastúca")[0].get_color()
for i in [0, 2]:
I = X[(ps[i] <= X) & (X <= ps[i+1])]
ax.plot(I, f(I), c=color, zorder=1)
## intervaly, na ktorých je funkcia klesajúca
color = ax.plot([], [], label=r"klesajúca")[0].get_color()
for i in [3, 5]:
I = X[(ps[i] <= X) & (X <= ps[i+1])]
ax.plot(I, f(I), c=color, zorder=1)
## asymptota bez smernice
color = ax.plot([], [], '--', lw=1, label=r"asymptota bez smernice")[0].get_color()
Y = np.linspace(-5.5, 6.5, 12*10+1)
Ay = Y
Ax = np.ones(len(Ay)) * (-1)
ax.plot(Ax, Ay, '--', lw=1, c=color) # v bode -1
Ay = Y
Ax = np.ones(len(Ay))
ax.plot(Ax, Ay, '--', lw=1, c=color) # v bode 1
## asymptota so smernicou
Ax = X
Ay = np.ones(len(Ax))
ax.plot(Ax, Ay, '--', lw=1, label=r"asymptota so smernicou v bode $\mp\infty$")
## legenda
# ax.legend()
ax.legend(loc='lower center', ncol=2)
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
fig.show()
Nakreslenie grafu racionálne lomenej funkcie danej rovnicou $$y = \frac{9x^2-6x+10}{18x-6}.$$ Definičným oborom je množina všetkých reálnych čísel rôznych od $\frac{1}{3}$.
#####
##### nakreslenie grafu funkcie
#####
#### vstupné údaje
def f(X): return (9 * X ** 2 - 6 * X + 10) / (18 * X - 6) # ufunc verzia funkcie
X = np.linspace(-4, 4, 8*100+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
X1, X2 = X[X < 1/3], X[X > 1/3] # číslo 1/3 nepatrí do oboru definície
Y1, Y2 = f(X1), f(X2) # odpovedajúce hodnoty závislej premennej
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 9) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
ax.set_title(r"Graf funkcie $y = \dfrac{9x^2-6x+10}{18x-6}$", fontdict={'verticalalignment': 'bottom'}) # pomenovanie diagramu
ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
# ax.grid() # pravoúhla sieť
ax.set_ylim(-4.5, 4.5) # ohraničenie hodnôt pre os y
## graf funkcie
color = ax.plot([], [])[0].get_color()
ax.plot(X1, Y1, X2, Y2, c=color)
## graf derivácie
# def df(X): return (9 * X ** 2 - 6 * X - 8) / (18 * X ** 2 - 12 * X + 2) # ufunc verzia funkcie
# color = ax.plot([], [])[0].get_color()
# ax.plot(X1, df(X1), X2, df(X2), c=color)
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
fig.show()
#### editor
# editor(figure=fig, axes=ax, function=f, intervals=[X1, X2])
Vyšetrenie priebehu racionálne lomenej funkcie danej rovnicou $$y = \frac{9x^2-6x+10}{18x-6}.$$ Tu nás zaujímajú tieto informácie:
Ako vypočítať extrémy funkcie? Extrémy nájdeme pomocou jej derivácie $y'$. Je to funkcia definovaná predpisom $$y'(x) = \frac{9x^2-6x-8}{18x^2-12x+2}.$$ V bodoch, kde nadobúda funkcia lokálny extrém, je jej derivácia nulová. Získame ich touto úpravou $$ \frac{9x^2-6x-8}{18x^2-12x+2} = \frac{(3x+2)(3x-4)}{2(3x-1)^2}. $$ Funkcia tak nadobúda extrémy v bodoch $-\frac{2}{3}$ a $\frac{4}{3}$.
Ako vypočítať asymptoty grafu funkcie? Všimnime si najprv, že platí $$ \lim_{x \to \frac{1}{3}}\ (18x-6) = 0 \\ x > \frac{1}{3} \Rightarrow (18x-6) > 0 \\ x < \frac{1}{3} \Rightarrow (18x-6) < 0 \\ 9x^2-6x+10 = (3x-1)^2+9 \geq 9 > 0 . $$ Odtiaľ dostaneme, že $$ \lim_{x \to \frac{1}{3}-} \frac{9x^2-6x+10}{18x-6} = -\infty \quad \lim_{x \to \frac{1}{3}+} \frac{9x^2-6x+10}{18x-6} = +\infty . $$ Asymptotou bez smernice grafu funkcie je tak priamka rovnobežná s osou $y$ prechádzajúcou bodom $\frac{1}{3}$ na $x$-ovej osi.
Treba ešte nájsť asymptoty so smernicou grafu funkcie v bodoch $\pm\infty$. Platí $$ \lim_{x \to +\infty} \frac{\frac{9x^2-6x+10}{18x-6}}{x} = \lim_{x \to +\infty} \frac{9-\frac{6}{x}+\frac{10}{x^2}}{18-\frac{6}{x}} = \frac{9}{18} = \frac{1}{2} \\ \lim_{x \to +\infty} \left(\frac{9x^2-6x+10}{18x-6} - \frac{1}{2}x\right) = \lim_{x \to +\infty} \frac{10-3x}{6(3x-1)} = \lim_{x \to +\infty} \frac{\frac{10}{x}-3}{6(3-\frac{1}{x})} = \frac{-3}{6\times 3} = -\frac{1}{6} . $$ Odtiaľ $$ \lim_{x \to +\infty} \left(\frac{9x^2-6x+10}{18x-6} - \left(\frac{1}{2}x-\frac{1}{6}\right)\right) = 0 . $$
Asymptotou so smernicou v bode $+\infty$ je tak priamka $3x-6y-1 = 0$. Podobne zistíme, že tá istá priamka je asymptotou so smernicou v bode $-\infty$.
#####
##### vyšetrenie priebehu funkcie
#####
#### vstupné údaje
def f(X): return (9 * X ** 2 - 6 * X + 10) / (18 * X - 6) # ufunc verzia funkcie
X = np.linspace(-4, 4, 8*100+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
X1, X2 = X[X < 1/3], X[X > 1/3] # číslo 1/3 nepatrí do oboru definície
Y1, Y2 = f(X1), f(X2) # odpovedajúce hodnoty závislej premennej
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 9) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
ax.set_title(r"Priebeh funkcie $y = \dfrac{9x^2-6x+10}{18x-6}$", fontdict={'verticalalignment': 'bottom'}) # pomenovanie diagramu
ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
ax.grid() # pravoúhla sieť
ax.set_ylim(-4.5, 4.5) # ohraničenie hodnôt pre os y
## x-ové súradnice extrémov funkcie vrátane krajných bodov intervalov
ps = [X1[0], -2/3, X1[-1], X2[0], 4/3, X2[-1]]
## extrémy funkcie
ax.plot(ps[1], f(ps[1]), 'o', label=r"ostré lokálne maximum v bode $-\frac{2}{3}$")
ax.plot(ps[4], f(ps[4]), 'o', label=r"ostré lokálne minimum v bode $\frac{4}{3}$")
## intervaly, na ktorých je funkcia rastúca
color = ax.plot([], [], label=r"rastúca")[0].get_color()
for i in [0, 4]:
I = X[(ps[i] <= X) & (X <= ps[i+1])]
ax.plot(I, f(I), c=color, zorder=1)
## intervaly, na ktorých je funkcia klesajúca
color = ax.plot([], [], label=r"klesajúca")[0].get_color()
for i in [1, 3]:
I = X[(ps[i] <= X) & (X <= ps[i+1])]
ax.plot(I, f(I), c=color, zorder=1)
## asymptota bez smernice
Ay = np.linspace(-4.5, 4.5, 9*10+1)
Ax = 1/3 * np.ones(len(Ay))
ax.plot(Ax, Ay, '--', lw=1, label=r"asymptota bez smernice v bode $\frac{1}{3}$")
## asymptota so smernicou
Ax = X
Ay = 1/2 * X - 1/6
ax.plot(Ax, Ay, '--', lw=1, label=r"asymptota so smernicou $3x-6y-1 = 0$ v bode $\mp\infty$")
## legenda
# ax.legend()
ax.legend(loc='lower center', ncol=2)
# ax.legend(loc=(-0.25, 0.65))
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
fig.show()
V nasledujúcich príkladoch budeme kresliť grafy a vyšetrovať priebeh racionálne lomených funkcií. Pretože tieto funkcie majú neohraničený definičný obor, budeme pri zostrojovaní grafu každej takejto funkcie vykreslovať len jej zaujímavú časť. Pri vyšetrovaní jej priebehu treba určiť:
Preferujeme algebraickú metódu pri hľadaní význačných bodov. Súradnice význačných bodov, ktoré sú zrejmé z grafu, netreba explicitne uvádzať.
Doporučujeme tiež rozdeliť riešenie do dvoch častí:
#####
##### šablóna riešenia (nakreslenie grafu a vyšetrenie priebehu funkcie)
#####
#### vstupné údaje
# def f(X): return None # ufunc verzia funkcie
# X = np.linspace(None, None, None+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
# X1, X2 = X[X < None], X[X > None] # číslo None nepatrí do oboru definície
# Y1, Y2 = f(X1), f(X2) # odpovedajúce hodnoty závislej premennej
#### obrázok s jedným diagramom
# fig, ax = plt.subplots()
# fig.set_size_inches(6, 4) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
# init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
# ax.set_title(r"Graf/Priebeh funkcie $y = \dfrac{\ldots}{\ldots}$", fontdict={'verticalalignment': 'bottom'}) # pomenovanie diagramu
# ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
# ax.grid() # pravoúhla sieť
# ax.set_xlim(None, None) # ohraničenie hodnôt pre os x
# ax.set_ylim(None, None) # ohraničenie hodnôt pre os y
# ax.set_xticks(range(None, None+1)) # kótovanie x-ovej osi
# ax.set_yticks(range(None, None+1)) # kótovanie y-ovej osi
## graf funkcie
# color = ax.plot([], [])[0].get_color()
# ax.plot(X1, Y1, X2, Y2, c=color)
## nulové body funkcie
# ax.plot(None, 0, 'kx', label=r"nulový bod $?$")
## x-ové súradnice extrémov funkcie vrátane krajných bodov intervalov
# ps = [X1[0], None, X1[-1], X2[0], None, X2[-1]]
## extrémy funkcie
# ax.plot(ps[None], f(ps[None]), 'o', label=r"extrém v bode $?$")
## intervaly, na ktorých je funkcia rastúca
# color = ax.plot([], [], label="rastúca")[0].get_color()
# for i in None:
# I = X[(ps[i] <= X) & (X <= ps[i+1])]
# ax.plot(I, f(I), c=color)
## intervaly, na ktorých je funkcia klesajúca
# color = ax.plot([], [], label="klesajúca")[0].get_color()
# for i in None:
# I = X[(ps[i] <= X) & (X <= ps[i+1])]
# ax.plot(I, f(I), c=color)
## asymptota bez smernice
# Ay = np.linspace(None, None, None+1)
# Ax = None * np.ones(len(Ay))
# ax.plot(Ax, Ay, '--', lw=1, label=r"asymptota bez smernice v bode $?$")
## asymptota so smernicou
# Ax = X
# Ay = None * np.ones(len(Ax)) + None
# ax.plot(Ax, Ay, '--', lw=1, label=r"asymptota so smernicou $?x+?y+? = 0$ v bode $-\infty$")
# ax.plot(Ax, Ay, '--', lw=1, label=r"asymptota so smernicou $?x+?y+? = 0$ v bode $+\infty$")
# ax.plot(Ax, Ay, '--', lw=1, label=r"asymptota so smernicou $?x+?y+? = 0$ v bode $\mp\infty$")
## legenda
# ax.legend()
# ax.legend(loc='center') # umiestenie v strede diagramu
# ax.legend(loc=(None, None)) # ľavý dolný roh legendy má súradnice (None, None)
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
# fig.show()
#### editor
# editor(figure=fig, axes=ax, function=f, intervals=[X1, X2])
Nakreslite grafy a vyšetrite priebeh týchto funkcií $$y = \frac{1-2x}{3x^2},$$ $$y = \frac{x^2-1}{x^2+1},$$ $$y = \frac{x^2+1}{x^2-1},$$ $$y = \frac{x^2+1}{x^2+2x+3},$$ $$y = \frac{x^2+1}{2x},$$ $$y = \frac{x}{x^2+2},$$ $$y = \frac{x^4-2x^3+x^2+4x-6}{2x^3-4x^2-2x+4}.$$
Návod. Nájdite najprv nulové body menovateľa.
Nakreslite graf a vyšetrite priebeh funkcie $$y = \dfrac{x^4-11x^2+18}{3x^3-6x^2-3x+6}.$$ Návod. Nájdite najprv nulové body menovateľa.